#ifndef HAL_RTC_DEVICE_H
#define HAL_RTC_DEVICE_H

#include <time.h>
#include <stdint.h>

class BM8563;

class HalRtcDevice {
 public:
  struct Time {
    int8_t hour = 0;
    int8_t min = 0;
    int8_t sec = 0;
  };

  struct Date {
    int16_t year = 0;
    int8_t mon = 0;
    int8_t day = 0;
    int8_t week = 0;
  };

  HalRtcDevice(BM8563& dev);

  /// @brief 获取日期
  /// @param date 日期
  /// @return true 操作成功
  bool GetDate(Date& date);

  /// @brief 获取时间
  /// @param time 时间
  /// @return true 操作成功
  bool GetTime(Time& time);

  /// @brief 设置日期
  /// @param date 日期
  /// @return true 操作成功
  bool SetDate(const Date& date);

  /// @brief 设置时间
  /// @param time 时间
  /// @return true 操作成功
  bool SetTime(const Time& time);

  /// @brief 设置日期时间
  /// @param [out] date 日期
  /// @param [out] time 时间
  /// @param timestamp 1970年1月1日0点至今的秒数
  /// @return true 成功
  static bool ConvertDateTime(Date& date, Time& time, time_t timestamp);
 private:
  BM8563& _devHandle;
};

#endif  // HAL_RTC_DEVICE_H
